/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package trunk.model;

import java.awt.Color;
import java.io.Serializable;
/**
 * Class ElementGeo 
 * 
 * Factorisation d'une forme géométrique
 * 
 * @author LEFEVRE Michael
 * @author THOUE Jonathan
 */
public abstract class ElementGeo implements Serializable{
   
    /**
     * Attribut de la classe ElementGeo     * 
     */
   protected Color couleur;
   protected boolean selected=false;

   
//abstract permet de definir tous les éléments que doivent proceder les enfants
   
   /**
     * Creer un clone
     * @return clone
     */
   public abstract ElementGeo createClone();
   /**
     * Creer la symetrie
     * @return la symetrie de l'element
     */
   abstract ElementGeo createSymetrie();
   /**
     * Fait la symetrie par rapport à l'origine
     * @param o - origine
     */
   public abstract void symetrieO(Point o);
   /**
     * Fait la symetrie par rapport à X
     * @param o - origine
     */
   public abstract void symetrieX(Point o);
   /**
     * Fait la symetrie par rapport à Y
     * @param o - origine
     */
   public abstract void symetrieY(Point o);
   /**
     * isPointOver vérifie si un point est contenu dans la forme géométrique
     *@param click - point
     *@param marge - marge d'erreur
     */
   public abstract boolean isPointOver(Point click,int marge);
   /**
     * translateTo déplace la forme géométrique
     *@param diffX - déplacement en X
     *@param diffY - déplacement en Y
     */
   public abstract void translateTo(int diffX, int diffY);   
   
   /**
     * Get couleur
     *@return couleur - couleur de l'element 
     */
   public Color getCouleur() {
       return couleur;
   }
   /**
     * Set couleur
     *@param couleur - couleur de l'element 
     */
   public void setCouleur(Color couleur) {
       this.couleur = couleur;
   }
    /**
     * Get selected
     *@return si l'element est selectionné
     */
    public boolean isSelected() {
        return selected;
    }
    /**
     * Set selected
     *@param selected - si l'element est selectionné
     */
    public void setSelected(boolean selected) {
        this.selected = selected;
    } 
    
}